﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DTO.Projectos;
using DTO.Accoes;
using DTO.Accoes.DespachoDecisao;
using DTO;

namespace Control
{
    class GestaoAccao
    {

        public static void RegistaCandidatura(Projecto p) {

            Candidatura c = new Candidatura();
            p.Accoes.Add(c);
            
        }

        public static void RegistaAnalise(Projecto p, bool enquadrado, string nomeTecnico) {

            AnaliseTecnica at = new AnaliseTecnica { 
                Enquadrado = enquadrado,
                NomeTecnico = nomeTecnico
            };

            p.Accoes.Add(at);
        }

        public static void RegistaDespachoAbertura(Projecto p, string parecer, string nomeGestor) {

            DespachoAbertura da = new DespachoAbertura { 
                Despacho = parecer,
                NomeGestor = nomeGestor
            };

            p.Accoes.Add(da);
        }
        
        public static void RegistaParecerTecnico(Projecto p, string parecer, bool favoravel, string nomeGestor) {

            ParecerTecnico pa = new ParecerTecnico { 
                Aceite = favoravel,
                NomeGestor = nomeGestor,
                Parecer = parecer
            };

            p.Accoes.Add(pa);
        }
        
        public static void RegistaReenquadrarProjecto(Projecto p) { 
            Reenquadrar re = new Reenquadrar ();
            p.Accoes.Add(re);
        }

        public static void RegistaDespachoDecisaoIncentivos(Projecto p, string despacho, bool aceite, double custoElegivel, double montanteFinanciado, DateTime datalimite) 
        {
            DespachoIncentivo accao = new DespachoIncentivo { 
                Aceite = aceite,
                CustoElegivel = custoElegivel,
                MontanteFinanciado = montanteFinanciado,
                Parecer = despacho,
                TempoLimite = datalimite
            };

            p.Accoes.Add(accao);
        }

        public static void RegistaDespachoDecisaoBonificacoes(Projecto p, string despacho, bool aceite, double taxaAprovada, double montanteMaximo, DateTime duracao) 
        {
            DespachoBonificacao accao = new DespachoBonificacao
            {
                Aceite = aceite,
                Parecer = despacho,
                TaxaAprovada = taxaAprovada,
                TempoLimite = duracao,
                MontanteMaximoDeFinanciamento = montanteMaximo
            };

            p.Accoes.Add(accao);
        }

        public static void RegistaDespachoDecisaoTransformaBonificacao(Projecto p, string despacho, double taxaAprovada, double montanteMaximo, DateTime duracao) 
        {
            TransformadoBonificacao accao = new TransformadoBonificacao { 
                Aceite = true,
                MontanteMaximoDeFinanciamento = montanteMaximo,
                Parecer = despacho,
                TaxaAprovada = taxaAprovada,
                TempoLimite = duracao
            };

            p.Accoes.Add(accao);
        }

        public static void RegistaSuspensao(Projecto p, Estados estado) {

            Suspender s = new Suspender { 
                Estado = estado
            };

            p.Accoes.Add(s);
        }
        
        
        public static void RegistaReactivacao(Projecto p, Estados estado) {

            Reactivar r = new Reactivar { 
                Estado = estado
            };

            p.Accoes.Add(r);
        }
        
        
        public static void RegistaFinalTempo(Projecto p) {
            FinalTempo accao = new FinalTempo();
            p.Accoes.Add(accao);
        }
        public static void RegistaPagamento(Projecto p, double montante) {
            Pagamento accao = new Pagamento
            {
                Montante = montante
            };

            p.Accoes.Add(accao);
        }
        public static void RegistaPedidoReforço(Projecto p, double quantia) {
            Reforco accao = new Reforco(quantia);
            p.Accoes.Add(accao);
        }

        public static void RegistaAlteracaoDados(Projecto p, Estados estado) { 
            AlterarDados accao = new AlterarDados(){
                Estado = estado
            };

            p.Accoes.Add(accao);
        }
    }
}
